Add a way to turn off toggle spacing in menus
authorMatthias Clasen <mclasen@redhat.com>
Wed, 24 Jun 2009 05:01:51 +0000 (01:01 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 24 Jun 2009 05:01:51 +0000 (01:01 -0400)
Reserving toggle space is nice for consistency in main menus
and context menus, but it gets in the way in special situations,
such as combo boxes, tabular menus, etc.

docs/reference/gtk/gtk-sections.txt
gtk/gtk.symbols
gtk/gtkcombobox.c
gtk/gtkmenu.c
gtk/gtkmenu.h

index 3d93755cbac1352833b3dcd858614e568056d996..45712f3d0389dafdbad7986e3d8a943ed6909a60 100644 (file)
@@ -2420,6 +2420,8 @@ gtk_menu_get_title
 gtk_menu_set_monitor
 gtk_menu_get_monitor
 gtk_menu_get_tearoff_state
+gtk_menu_set_reserve_toggle_size
+get_menu_get_reserve_toggle_size
 <SUBSECTION>
 gtk_menu_popdown
 gtk_menu_reposition
index 3fdbb67703bf51016914e7b5f7876c10eb906a4d..0449189a7008a701b0dac3d0d175f3c9eb978699 100644 (file)
@@ -2443,6 +2443,7 @@ gtk_menu_get_active
 gtk_menu_get_monitor
 gtk_menu_get_attach_widget
 gtk_menu_get_for_attach_widget
+gtk_menu_get_reserve_toggle_size
 gtk_menu_get_tearoff_state
 gtk_menu_get_title
 gtk_menu_get_type G_GNUC_CONST
@@ -2455,6 +2456,7 @@ gtk_menu_set_accel_group
 gtk_menu_set_accel_path
 gtk_menu_set_active
 gtk_menu_set_monitor
+gtk_menu_set_reserve_toggle_size
 gtk_menu_set_screen
 gtk_menu_set_tearoff_state
 gtk_menu_set_title
index b57618ad55228dde49bb0c121b8d09c9ded44859..4e4349e7e2993d3a1636c846ed4de65a853f1852 100644 (file)
@@ -2840,7 +2840,7 @@ gtk_combo_box_menu_setup (GtkComboBox *combo_box,
   /* create our funky menu */
   menu = gtk_menu_new ();
   gtk_widget_set_name (menu, "gtk-combobox-popup-menu");
-  _gtk_menu_set_reserve_toggle_size (GTK_MENU (menu), FALSE);
+  gtk_menu_set_reserve_toggle_size (GTK_MENU (menu), FALSE);
   
   g_signal_connect (menu, "key-press-event",
                    G_CALLBACK (gtk_combo_box_menu_key_press), combo_box);
@@ -2953,7 +2953,7 @@ gtk_combo_box_menu_fill_level (GtkComboBox *combo_box,
          if (gtk_tree_model_iter_has_child (model, &iter))
            {
              submenu = gtk_menu_new ();
-              _gtk_menu_set_reserve_toggle_size (GTK_MENU (submenu), FALSE);
+              gtk_menu_set_reserve_toggle_size (GTK_MENU (submenu), FALSE);
              gtk_widget_show (submenu);
              gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), submenu);
              
@@ -3464,7 +3464,7 @@ gtk_combo_box_menu_row_inserted (GtkTreeModel *model,
       if (!menu)
        {
          menu = gtk_menu_new ();
-          _gtk_menu_set_reserve_toggle_size (GTK_MENU (menu), FALSE);
+          gtk_menu_set_reserve_toggle_size (GTK_MENU (menu), FALSE);
          gtk_widget_show (menu);
          gtk_menu_item_set_submenu (GTK_MENU_ITEM (parent), menu);
          
index 49d2e2319fdd46404e90c1efa1b93b696178b5cf..0fd5d3d4addf9b13891e0b9a8d13394e6dc4596e 100644 (file)
@@ -125,7 +125,8 @@ enum {
   PROP_ATTACH_WIDGET,
   PROP_TEAROFF_STATE,
   PROP_TEAROFF_TITLE,
-  PROP_MONITOR
+  PROP_MONITOR,
+  PROP_RESERVE_TOGGLE_SIZE
 };
 
 enum {
@@ -596,6 +597,27 @@ gtk_menu_class_init (GtkMenuClass *class)
                                                             1,
                                                             GTK_PARAM_READABLE));
 
+  /**
+   * GtkMenu:reserve-toggle-size:
+   *
+   * A boolean that indicates whether the menu reserves space for
+   * toggles and icons, regardless of their actual presence.
+   *
+   * This property should only be changed from its default value
+   * for special-purposes such as tabular menus. Regular menus that
+   * are connected to a menu bar or context menus should reserve
+   * toggle space for consistency.
+   *
+   * Since: 2.18
+   */
+  g_object_class_install_property (gobject_class,
+                                   PROP_RESERVE_TOGGLE_SIZE,
+                                   g_param_spec_boolean ("reserve-toggle-size",
+                                                        P_("Reserve Toggle Size"),
+                                                        P_("A boolean that indicates whether the menu reserves space for toggles and icons"),
+                                                        TRUE,
+                                                        GTK_PARAM_READWRITE));
+
   gtk_widget_class_install_style_property (widget_class,
                                            g_param_spec_int ("horizontal-padding",
                                                              P_("Horizontal Padding"),
@@ -840,6 +862,9 @@ gtk_menu_set_property (GObject      *object,
     case PROP_MONITOR:
       gtk_menu_set_monitor (menu, g_value_get_int (value));
       break;
+    case PROP_RESERVE_TOGGLE_SIZE:
+      gtk_menu_set_reserve_toggle_size (menu, g_value_get_boolean (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -877,6 +902,9 @@ gtk_menu_get_property (GObject     *object,
     case PROP_MONITOR:
       g_value_set_int (value, gtk_menu_get_monitor (menu));
       break;
+    case PROP_RESERVE_TOGGLE_SIZE:
+      g_value_set_boolean (value, gtk_menu_get_reserve_toggle_size (menu));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -5284,13 +5312,50 @@ gtk_menu_grab_notify (GtkWidget *widget,
     }
 }
 
+/**
+ * gtk_menu_set_reserve_toggle_size:
+ * @menu: a #GtkMenu
+ * @reserve_toggle_size: whether to reserve size for toggles
+ *
+ * Sets whether the menu should reserve space for drawing toggles 
+ * or icons, regardless of their actual presence.
+ *
+ * Since: 2.18
+ */
 void
-_gtk_menu_set_reserve_toggle_size (GtkMenu  *menu,
-                                   gboolean  reserve)
+gtk_menu_set_reserve_toggle_size (GtkMenu  *menu,
+                                  gboolean  reserve_toggle_size)
 {
   GtkMenuPrivate *priv = gtk_menu_get_private (menu);
+  gboolean no_toggle_size;
   
-  priv->no_toggle_size = !reserve;
+  no_toggle_size = !reserve_toggle_size;
+
+  if (priv->no_toggle_size != no_toggle_size)
+    {
+      priv->no_toggle_size = no_toggle_size;
+
+      g_object_notify (G_OBJECT (menu), "reserve-toggle-size");
+    }
+}
+
+/**
+ * gtk_menu_get_reserve_toggle_size:
+ * @menu: a #GtkMenu
+ *
+ * Returns whether the menu reserves space for toggles and
+ * icons, regardless of their actual presence.
+ *
+ * Returns: Whether the menu reserves toggle space
+ *
+ * Since: 2.18
+ */
+gboolean
+gtk_menu_get_reserve_toggle_size (GtkMenu *menu)
+{
+  GtkMenuPrivate *priv = gtk_menu_get_private (menu);
+
+  return !priv->no_toggle_size;
 }
 
 #define __GTK_MENU_C__
index 4cdcad3fc3b59ed2731578b877c35be700bce2a4..694457a059d6ead9f22c5aa6231ec1a2fe72eb18 100644 (file)
@@ -209,10 +209,9 @@ GList*     gtk_menu_get_for_attach_widget (GtkWidget           *widget);
 #define gtk_menu_insert(menu,child,pos)        gtk_menu_shell_insert ((GtkMenuShell *)(menu),(child),(pos))
 #endif /* GTK_DISABLE_DEPRECATED */
 
-/* private */
-
-void      _gtk_menu_set_reserve_toggle_size (GtkMenu  *menu,
-                                             gboolean  reserve);
+void     gtk_menu_set_reserve_toggle_size (GtkMenu  *menu,
+                                          gboolean   reserve_toggle_size);
+gboolean gtk_menu_get_reserve_toggle_size (GtkMenu  *menu);
 
 
 G_END_DECLS